package com.dz.tool.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface OracleServer {

    ///////////////////////////////////////////////////////////////////////////
    // mysql 针对数据库 生成字段Excel文档
    ///////////////////////////////////////////////////////////////////////////
    void OracleToExcel(HttpServletResponse response);

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 备份
    ///////////////////////////////////////////////////////////////////////////
    void OracleBackUp() throws Exception;

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 Oracle (通过数据泵整个库进行迁移)
    ///////////////////////////////////////////////////////////////////////////
    void OracleToOracle(boolean dataList) throws Exception;

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 Oracle (全量迁移)
    ///////////////////////////////////////////////////////////////////////////
    void OracleToOracleCompleteTableList(String dataBaseName,List<String> OracleTableList,boolean dataList);

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 Mysql [依靠数量来取数据]
    ///////////////////////////////////////////////////////////////////////////
    void OracleToMysql(String dataBaseName, List<String> tableList, boolean dataBool, boolean dataBaseCreat, Map<String,String> tableMapping) throws Exception;

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 Mysql [依靠时间来取数据]
    ///////////////////////////////////////////////////////////////////////////
    void OracleToMysqlToDate(List<Map<String,String>> OracleTableList) throws Exception;

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 主表创建从表的DBLink
    ///////////////////////////////////////////////////////////////////////////
    void OracleToDblink();

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 ES （临时干别的用了，es存储逻辑在下面，上面有问题）
    ///////////////////////////////////////////////////////////////////////////
    void OracleToEs(String dataBaseName,List<String> OracleTableList, boolean dataBool) throws IOException;

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 数据表对比
    // 用途：系统开发期间，多个环境，数据库有可能加字段了，但是你不知道具体加了什么，用这个脚本同步一下字段
    // 增加能够同步基础数据，但是只能说某一个表全量数据覆盖，不能单独加一条数据
    ///////////////////////////////////////////////////////////////////////////
    void OracleToField(String dataBaseName,List<String> OracleTableList,List<String> transferTable) throws IOException;

    ///////////////////////////////////////////////////////////////////////////
    // oracle 执行sql获取数据输出到Excel中
    ///////////////////////////////////////////////////////////////////////////
    void OracleToSqlToExcel(HttpServletResponse response);

    ///////////////////////////////////////////////////////////////////////////
    // oracle 迁移mysql后增量数据处理
    ///////////////////////////////////////////////////////////////////////////
    void OracleToOracleIncrement(String dataBaseName,List<String> OracleTableList,Map<String,String> tableZH);

    ///////////////////////////////////////////////////////////////////////////
    // oracle 链接两个Oracle数据库，执行相同的语句查看结果
    ///////////////////////////////////////////////////////////////////////////
    void OracleToOracleSql();



    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 Oracle (定时抽取投保单号)
    ///////////////////////////////////////////////////////////////////////////
    void OracleToOracleIncrementCAppNo();

    ///////////////////////////////////////////////////////////////////////////
    // Oracle 转 Oracle (增量迁移)
    // 获取目标数据表的结构，根据增量处理还是全量处理的标记，获取前一天的增量数据根据主键删除旧数据并重新添加
    // 传参方式 table = new HashMap<>();
    //        table.put("table","WEB_PLY_CI"); 表名
    //        table.put("id","C_PK_ID");  主键字段
    //        table.put("way","increment");  // increment || all    增量||全量
    //        table.put("inc_field","T_UPD_TM");  // 增量字段
    //        OracleTableList.add(table);
    ///////////////////////////////////////////////////////////////////////////
    // 某一时段的全量跑批
    void OracleToOracleIncrementTableList(List<Map<String,String>> OracleTableList);
    //增量跑批
    void OracleToOracleIncrementTableList2(List<Map<String,String>> OracleTableList);

    boolean selectTableIsOK();

    void BaseTONewTable(List<Map<String,String>> OracleTableList);
    //脚本方式将数据拆年表
    void tableTONewTableYears(List<Map<String,String>> OracleTableList);
    //脚本执行存过方式拆年表
    void tableTONewTableYearsCG(List<Map<String,String>> OracleTableList);
    void tableTONewTableYearsCG2(List<Map<String,String>> OracleTableList);
    void tableTONewTableYearsCG3(List<Map<String,String>> OracleTableList);
    //脚本执行存过方式老表数据转新表
    void tableTONewTableCG(List<Map<String,String>> OracleTableList);
    // 批量执行sql创建年表
    void tableYearCreat(Map<String,String> stringMap);



}
